package framework.attack;

import framework.BasicFighter;
import framework.Updatable;

public interface Attack<T extends BasicFighter> extends Updatable {
	
	/**
	 * The power of the attack, in percentage
	 * @return
	 */
	public int getPower();
	
	/**
	 * Triggering the attack
	 * @return
	 */
	public void trigger();
	
	/**
	 * Gets the number of frames of this attack
	 * @return
	 */
	public int getDuration();
	
	/**
	 * Determines if the attack is done or in process
	 */
	public boolean isActive();
	
	/**
	 * Determines if the attack is done or in process
	 */
	public boolean isInterruptable();
	
	/**
	 * Returns the fighter who is attacking
	 * @return
	 */
	public T getAttacker();
	
	/**
	 * Action to perform when the attack hit an enemy
	 * @param f the fighter being hit
	 */
	public void onHit(BasicFighter f);
	
	public void setAttacker(T f);
	
	public boolean isBlocking();
	
	public boolean isDrawingAttacker();
	
}
